﻿#ifndef AUDIOMANAGER_H
#define AUDIOMANAGER_H
#include <map>
#include <string>
#include <vector>
#include <memory>
#include "audio_player.h"

// 音频管理器
// 单例对象
class AudioManager {
private:
	static AudioManager instance;
	AudioManager() = default;
	
	AudioManager(const AudioManager&) = delete;
	AudioManager& operator=(const AudioManager&) = delete;
	// 资源
	std::map<std::string, std::shared_ptr<AudioPlayer> > audios;

public:
	~AudioManager() = default;
	static AudioManager& getInstance() {
		return instance;
	}

	// 加载
	bool load(const std::string id, const std::string path);
	bool unload(const std::string id);

	// 播放控制方法
	bool play(const std::string id) const; //开始播放
	bool pause(const std::string id) const; //暂停
	bool restart(const std::string id) const; //重新开始
	bool setLoop(const std::string id, bool loop); //设置循环播放

	// 音量控制方法
	bool setVolume(const std::string id, float volume); //设置音量 0-100
	float getVolume(const std::string id) const;      //获取音量

	// 淡入淡出控制方法
	bool fadeIn(const std::string id, float durationSeconds) const;  //淡入
	bool fadeOut(const std::string id, float durationSeconds) const; //淡出

	// 状态查询方法
	bool isInitialized(const std::string id) const; //检查是否成功初始化
	bool isPlaying(const std::string id) const; //检查是否正在播放
	bool isLooping(const std::string id) const; //检查是否循环播放
	float getDuration(const std::string id) const;  //获取音频总时长
	float getPlayingOffset(const std::string id) const;  //获取当前播放位置

	// 释放所有资源
	bool releaseAll();

};




#endif